"""
推导式 ：列表推到式，集合推导式，字典推导式
"""
print("---------  列表推导式  ------------")
print("---------  问题：创建一个0-10的列表  ------------")
list1 = []
# while 实现
for i in range(11):
    list1.append(i)
print(list1)

list1.clear()
#while 实现
temp = 0
while temp < 11 :
    list1.append(temp)
    temp+=1
print(list1)

print("**** 推导式实现 ****")
list1.clear()
# 推导式实现
list1 =[ i for i in range(11) ] # [] 扩起来表示最后是个列表
print(list1)

print("**** 含有if的推导式：案例：得到一个只含有偶数的列表 ****")
# 方法一，通过range的步长实现
listRange2 = [ i for i in range(0,10,2)]
print(listRange2)
# 方法二：推导式+if实现
listOnlyDouble = [ i for i in range(10) if i%2 == 0 ]
print(listOnlyDouble)

print("**** 含有if的推导式：案例：得到一个[(1,0),(2,1),(3,2)  ... 这样的列表] ****")
# 注意：这里的 for i in  xx for j in xx 其实就是一个嵌套for循环，
tupleInList  = [ (i,j) for i in range(1,4) for j in range(3)]
print(tupleInList)

print("---------  字典推导式  ------------")
print("案例：使用推导式构建 {'1':1,'2':4,'3':9 .. '5':25} 这样的字典,")
dictDemo = {str(i):i**2 for i in range(1,6)}
print(dictDemo)

print("案例：将如下的两个列表合成一个字典,")
keys = ["name","age","address"]
values = ["Tom" , "12" , "ShangHai"]
dictD = { keys[i]:values[i] for i in range(3)}
print(dictD)
#遍历这个字典
for k,v in dictD.items():
    print(f"键的值是：{k} , 值为：{v}")


print("案例：过滤出字典中，value值大于200的数据")
myDict = {'MBP': 268, 'HP': 125, 'DEL':201 ,'Lenovo':199 , 'Acer':99}
filledDict = { k:v for k,v in myDict.items() if v >= 200}
print(filledDict)

print("---------  集合导式  ------------")
# 创建一个集合为{1,4,9,16} 这样的集合，
setdemo = { i**2 for i in range(5)}
print(setdemo)